package org.jiuling.wechat.officialaccount.model;

import org.jiuling.wechat.officialaccount.enums.ReceiveMessageTypeEnum;
import org.jiuling.xml.jaxb.adapter.LocalDateTimeDateAdapter;
import org.jiuling.wechat.officialaccount.model.adapter.ReceiveMessageTypeAdapter;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.time.LocalDateTime;

/**
 * 接收消息模型
 * @author 紫灵
 * @date 2024年11月29日 14时03分42秒
 */
@XmlRootElement(name = "xml")
public class ReceiveMessageModel {

    /** 开发者微信号 */
    @XmlElement(name = "ToUserName")
    private String toUserName;
    /** 发送方账号（一个OpenID） */
    @XmlElement(name = "FromUserName")
    private String fromUserName;
    /** 消息创建时间 （整型） */
    @XmlElement(name = "CreateTime")
    @XmlJavaTypeAdapter(LocalDateTimeDateAdapter.class)
    private LocalDateTime createTime;
    /** 消息类型，文本为text */
    @XmlElement(name = "MsgType")
    @XmlJavaTypeAdapter(ReceiveMessageTypeAdapter.class)
    private ReceiveMessageTypeEnum msgType;
    /** 文本消息内容 */
    @XmlElement(name = "Content")
    private String content;
    /** 消息id，64位整型 */
    @XmlElement(name = "MsgId")
    private Long msgId;
    /** 消息的数据ID（消息如果来自文章时才有） */
    @XmlElement(name = "MsgDataId")
    private Long msgDataId;
    /** 多图文时第几篇文章，从1开始（消息如果来自文章时才有） */
    @XmlElement(name = "Idx")
    private Long idx;
    /** 图片链接（由系统生成） */
    @XmlElement(name = "PicUrl")
    private String picUrl;
    /** 图片消息媒体id，可以调用获取临时素材接口拉取数据。 */
    @XmlElement(name = "MediaId")
    private String mediaId;
    /** 16K采样率语音消息媒体id，可以调用获取临时素材接口拉取数据，返回16K采样率amr/speex语音。 */
    @XmlElement(name = "MediaId16K")
    private String mediaId16K;
    /** 语音格式，如amr，speex等 */
    @XmlElement(name = "Format")
    private String format;
    /** 识别，针对音频 */
    @XmlElement(name = "Recognition")
    private String recognition;
    /** 视频消息缩略图的媒体id，可以调用多媒体文件下载接口拉取数据。 */
    @XmlElement(name = "ThumbMediaId")
    private String thumbMediaId;
    /** 地理位置纬度 */
    @XmlElement(name = "Location_X")
    private Double locationX;
    /** 地理位置经度 */
    @XmlElement(name = "Location_Y")
    private Double locationY;
    /** 地图缩放大小 */
    @XmlElement(name = "Scale")
    private Integer scale;
    /** 地理位置信息 */
    @XmlElement(name = "Label")
    private String label;

    public String getToUserName() {
        return toUserName;
    }

    public String getFromUserName() {
        return fromUserName;
    }

    public LocalDateTime getCreateTime() {
        return createTime;
    }

    public ReceiveMessageTypeEnum getMsgType() {
        return msgType;
    }

    public String getContent() {
        return content;
    }

    public Long getMsgId() {
        return msgId;
    }

    public Long getMsgDataId() {
        return msgDataId;
    }

    public Long getIdx() {
        return idx;
    }

    public String getPicUrl() {
        return picUrl;
    }

    public String getMediaId16K() {
        return mediaId16K;
    }

    public String getMediaId() {
        return mediaId;
    }

    public String getFormat() {
        return format;
    }

    public String getRecognition() {
        return recognition;
    }

    public String getThumbMediaId() {
        return thumbMediaId;
    }

    public Double getLocationX() {
        return locationX;
    }

    public Double getLocationY() {
        return locationY;
    }

    public Integer getScale() {
        return scale;
    }

    public String getLabel() {
        return label;
    }
}
